﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using Clinica_Frba.DataRepository;
using Clinica_Frba.DataClasses;


namespace Clinica_Frba.UserInterface.Compra_de_Bono
{
    
    public partial class FormCompraBono : Form
    {
        public Afiliado UsuarioAfil { get; set; }
        public Afiliado UsuarioAfilComprador { get; set; }

        private MenuPrincipal menuAnterior;
        public FormCompraBono(MenuPrincipal anterior)
        {
            InitializeComponent();
            labelUsuario.Text = anterior.username;
            labelFechaCompra_bono.Text = (String)DateTime.Parse(System.Configuration.ConfigurationSettings.AppSettings["Fecha"]).ToShortDateString();
            this.menuAnterior = anterior;
            UsuarioAfil = new Afiliado(anterior.username);
            textBoxNroAfiliado.Enabled = true;
            textBoxNroAfiliado.Text = (String)UsuarioAfil.usuario.ToString();

            if (UsuarioAfil.rol_afiliado == 3)
            //El username es un usuario Afiliado
            {
                buttonValidarAfiliado.Visible = false;
                textBoxNroAfiliado.Text = (String)UsuarioAfil.afil_id.ToString();
                textBoxNroAfiliado.Enabled = false;
                labelPlanDelUsuario.Text = Utilidades.ObtenerDescipcionPlan(UsuarioAfil.afil_Plan_Medico);
                labelPrecioConsulta.Text = (new BonoConsulta(UsuarioAfil)).precio.ToString();
                labelPrecioFarmacia.Text = (new BonoFarmacia(UsuarioAfil)).precio.ToString();
            }
            else
            //El username es un usuario Administrador
            {
                buttonValidarAfiliado.Visible = true;
                labelPlanDelUsuario.Text = "Ingresar numero de USUARIO Afiliado y VALIDAR";
                labelPlanMedico.Visible = false;
                labelPrecio1.Visible = false;
                labelPrecio2.Visible = false;
                button1.Visible = false;
                labelPrecioConsulta.Visible = false;
                labelPrecioFarmacia.Visible = false;
                labelTotal.Visible = false;
                label2.Visible = false;
                numericUpDown1.Visible = false;
                numericUpDown2.Visible = false;
                botonComprar.Visible = false;
                labelBonoConsulta.Visible = false;
                labelBonoFarmacia.Visible = false;

            }
        }

        private void buttonVolver_Click(object sender, EventArgs e)
        {
            this.Close();
            menuAnterior.Show();
        }


        private void buttonValidarAfiliado_Click(object sender, EventArgs e)
        {
            try
            {
                if (Utilidades.EsAfiliado(Convert.ToInt32(textBoxNroAfiliado.Text)) == true)
                {
                    labelPlanMedico.Visible = true;
                    labelPrecio1.Visible = true;
                    labelPrecio2.Visible = true;
                    button1.Visible = true;
                    labelPrecioConsulta.Visible = true;
                    labelPrecioFarmacia.Visible = true;
                    labelTotal.Visible = true;
                    label2.Visible = true;
                    numericUpDown1.Visible = true;
                    numericUpDown2.Visible = true;
                    botonComprar.Visible = true;
                    labelBonoConsulta.Visible = true;
                    labelBonoFarmacia.Visible = true;
                    buttonValidarAfiliado.Visible = true;
                    textBoxNroAfiliado.Enabled = false;
                    UsuarioAfilComprador = new Afiliado(textBoxNroAfiliado.Text);
                    labelPlanDelUsuario.Text = Utilidades.ObtenerDescipcionPlan(UsuarioAfilComprador.afil_Plan_Medico);
                    labelPrecioConsulta.Text = (new BonoConsulta(UsuarioAfilComprador)).precio.ToString();
                    labelPrecioFarmacia.Text = (new BonoFarmacia(UsuarioAfilComprador)).precio.ToString();

                }
                else
                {
                    MessageBox.Show("El usuario afiliado ingresado no es válido o no se encuentra en la base de datos.", "Error", MessageBoxButtons.OK);

                }
            }

            catch { MessageBox.Show("Número de Afiliado incorrecto", "Error!", MessageBoxButtons.OK); }

        

        }

        private void button1_Click(object sender, EventArgs e)
        {
            labelTotal.Text = (String)(Convert.ToInt32(labelPrecioConsulta.Text) * Convert.ToInt32(numericUpDown1.Value) + Convert.ToInt32(labelPrecioFarmacia.Text) * Convert.ToInt32(numericUpDown2.Value)).ToString();
        }


        private void botonComprar_Click(object sender, EventArgs e)
        {
            try
            {
                if (UsuarioAfil.rol_afiliado == 3)
                {
                    RealizarCompra(UsuarioAfil);
                }
                else if (UsuarioAfilComprador.rol_afiliado == 3)
                {
                    //El admin le hace una compra al Afiliado
                    RealizarCompra(UsuarioAfilComprador);
                }

            }
            catch { MessageBox.Show("Por favor: Inserte correctamente todos los campos", "Error!", MessageBoxButtons.OK); }
        }


        private void RealizarCompra(Afiliado Afil)
        {
            Compra_bono unaCompra = new Compra_bono(Afil);
            List<BonoConsulta> bonosConsulta = new List<BonoConsulta>();
            List<BonoFarmacia> bonosFarmacia = new List<BonoFarmacia>();

            if (PuedeRealizarCompra(Afil))
            {
                //Lista de bonos farmacia

                for (int i = 0; i < numericUpDown1.Value; i++)
                {
                    BonoFarmacia unBono = new BonoFarmacia(Afil);
                    bonosFarmacia.Add(unBono);
                }
                //Lista de bonos Consulta                    
                for (int i = 0; i < numericUpDown2.Value; i++)
                {
                    BonoConsulta unBono = new BonoConsulta(Afil);
                    bonosConsulta.Add(unBono);
                }


                unaCompra.BonosFarmacia = bonosFarmacia;
                unaCompra.BonosConsulta = bonosConsulta;

                if (Afil.Comprabono(unaCompra))
                {
                    int id_afiliado = Convert.ToInt32(textBoxNroAfiliado.Text);
                    FormImpresionBonos formImpresion = new FormImpresionBonos(Afil, unaCompra, id_afiliado);
                    this.Hide();
                    formImpresion.Show();
                    MessageBox.Show("La compra se ha realizado exitosamente", "Felicitaciones!", MessageBoxButtons.OK);
                }
                else { MessageBox.Show("No se pudo realizar la compra", "Error!", MessageBoxButtons.OK); }

            }
            else { MessageBox.Show("El usuario no puede realizar la compra, se encuentra inhabilitado", "Error!", MessageBoxButtons.OK); }
            this.Hide();
            menuAnterior.Show();

        }


        private bool PuedeRealizarCompra(Afiliado afiliado)
        {
            return afiliado.Activo;
        }

    }

}
